<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <h3>严格模式 在开头使用"use strict"</h3>
    <h4>严格模式下未声明就赋值的结果:</h4>
    <p id="e1" style="color: red;"></p>
    <h4>任何未声明的都不能使用</h4>
    <h4>严格模式下，如果尝试删除变量和函数，会抛出语法错误:</h4>
    <p id="e2" style="color: red;"></p>
    <h4>严格模式下，不允许重复参数名称</h4>
    <h4>在严格模式下，不允许写入只读属性：</h4>
    <p>在您的浏览器中按F12进行调试，并选择"控制台"在调试器菜单:</p>
    <p id="e3" style="color: red;"></p>
    <h4>在严格模式下，不允许使用with语句(语法错误)：</h4>
    <h4>在严格模式下，不允许使用八进制数字(语法错误)：</h4>
    <h4>出于安全原因，eval()不允许在调用它的范围内创建变量：</h4>
    <p id="e4" style="color: red;"></p>
    <h4>然后是eval和arguments不能当作变量名</h4>

    <script>
        "use strict";

        try {
            s = "123";
            document.write(s);
        } catch (e) {
            document.getElementById("e1").innerHTML = e.name + "<br>" + e.message;
        }

        try {
            var msg = "114514";
            // delete msg;  会报错 SyntaxError
        } catch (e) {
            document.getElementById("e2").innerHTML = e.name + "<br>" + e.message;
        }
        var person = {
            name: "Akash",
            age: 22
        };
        Object.defineProperty(person, "gender", {
            value: "male",
            writable: false
        });
        try {
            person.gender = "female"; // TypeError
        } catch (e) {
            document.getElementById("e3").innerHTML = e.name + "<br>" + e.message;
        }
        try {
            eval("var x = 10;");
            console.log(x); // ReferenceError: x 未定义
        } catch (e) {
            document.getElementById("e4").innerHTML = e.name + "<br>" + e.message;
        }
    </script>
</body>

</html>